import FPJDefine from "../../../Game/FPJ/Prefabs/FPJDefine";

const { ccclass, property } = cc._decorator;
/** 房间按钮item 相当于各个房间按钮 create by tm */
@ccclass
export default class RoomBtnItem extends cc.Component {
    //-------------组件区------------
    /** 未选中样式图片 */
    @property(cc.Sprite)
    img_normal: cc.Sprite = null;
    /** 选中样式图片 */
    @property(cc.Sprite)
    img_choose: cc.Sprite = null;

    /** 空闲桌数 */
    @property(cc.Node)
    btn_idle: cc.Node = null;
    /** 空闲桌数 */
    @property(cc.Label)
    lbl_idle: cc.Label = null;
    //-------------变量区------------
    /** 大厅类型(1:普通大厅;2:小大厅(多台);) */
    private halltype: number = null;
    /** 房间id */
    roomid: string = null;
    /** 是否选中 */
    isChoose: boolean = null;
    /** 事件 */
    private _event: any = null;
    onLoad() {
        this.addEvent();
    }
    /** 添加事件 */
    addEvent(): void {
        this._event = {};
        this._event[`GameChange`] = cc.vv.eventCustom.on(`GameChange`, this.GameChange.bind(this), this.node);
    }
    /** 移除事件 */
    removeEvent(): void {
        if (this._event) {
            for (let _key in this._event) {
                this._event[_key] && cc.vv.eventCustom.off(`${_key}`, this._event[_key]);
                delete this._event[_key];
            }
        }
    }
    /** 初始化数据 */
    initData(_data: {
        /** 大厅类型(1:普通大厅;2:小大厅(多台);) */
        halltype: number,
        /** 房间id */
        roomid: string,
        /** 房间按钮 纹理 [未选中,选中] */
        roomSF: cc.SpriteFrame[],
    }): void {
        if (!_data || !_data.roomSF || _data.roomSF.length <= 0) return;
        this.halltype = _data.halltype;
        this.roomid = _data.roomid;
        this.img_normal.spriteFrame = _data.roomSF[0];
        this.img_choose.spriteFrame = _data.roomSF[1];
        this.refreshIdleNum();
    }
    //-----------------------事件区-----------------------
    /** 游戏变化 */
    GameChange(_evt): void {
        this.refreshIdleNum();
    }
    /** 点击RoomBtnItem */
    touchRoomBtnItem(): void {
        if (this.isChoose) return;
        this.node.parent.emit(`touchRoomBtnItem`, {
            roomid: this.roomid
        });
    }
    //-----------------------内容区-----------------------
    /** 设置选中 */
    setChoose(_ischoose: boolean): void {
        this.isChoose = _ischoose;
        this.img_choose.node.active = _ischoose;
        this.img_normal.node.active = !_ischoose;
    }
    /** 刷新空闲桌数 */
    refreshIdleNum(): void {
        let _count: number = 0;
        FPJDefine.room_list && FPJDefine.room_list.forEach(_v => {
            if (_v.room_id == this.roomid && _v.table_list) {
                _v.table_list.forEach(_val => {
                    !_val.sitdown_player && (!_val.hold_table || JSON.stringify(_val.hold_table) == `{}`) && _count++;
                });
            }
        });
        this.lbl_idle.string = `${_count}`;
        this.btn_idle.active = _count > 0;
    }
    /** 点击空闲桌数 */
    touchIdle(): void {
        //找到空闲桌子id
        let _tableid: string = null;
        FPJDefine.room_list && FPJDefine.room_list.forEach(_v => {
            if (_v.room_id == this.roomid && _v.table_list) {
                for (let _idx in _v.table_list) {
                    let _table = _v.table_list[_idx];
                    if (!_table.sitdown_player && (!_table.hold_table || JSON.stringify(_table.hold_table) == `{}`)) {
                        _tableid = _table.table_id;
                        break;
                    }
                }
            }
        });
        if (!_tableid) {
            cc.vv.GLUtils.showTips(`没有空闲机器`);
            return;
        }
        //进入桌子
        let _enterTable = () => {
            let _gameid: number = 109;
            cc.vv.GLUtils.sendRequest("ATTEnterTable", {
                table_id: _tableid
            }, (_err, _data) => {
                if (!_err) {
                    if (_data.errorcode) {
                        cc.vv.GLUtils.showTips(_data.errordes);
                    } else {
                        FPJDefine.setTableDetail(_data.table_data);
                        FPJDefine.setcurrentTableId(_tableid);
                        FPJDefine.setCurrentState(_data.table_data.status);
                        if (this.halltype == 1) {
                            let _path = cc.vv.GLDefine.getEnglishNameById(_gameid);
                            cc.vv.UIMgr.open(cc.vv.GLConfig.waiting_path);
                            cc.vv.sceneMgr.openScene(_path, _data, () => {
                                cc.vv.eventCustom.emit("openGame");
                                cc.vv.UIMgr.close(cc.vv.GLConfig.waiting_path, cc.vv.UIMgr.closeType.hide);
                            });
                        } else {
                            cc.vv.eventCustom.emit("resetTable");
                        }
                    }
                }
            });
        }
        switch (this.halltype) {
            case 2://多台
                cc.vv.GLUtils.sendRequest(`ATTLeaveTable`, {
                    table_id: FPJDefine.getcurrentTableId(),   // 桌子ID
                }, (_err, _data) => {
                    if (!_data.errorcode) {
                        _enterTable();
                    } else {
                        cc.vv.GLUtils.showTips(_data.errordes);
                    }
                });
                break;
            default:
                _enterTable();
                break;
        }
    }
    onDestroy() {
        this.removeEvent();
    }
}
